//数据列表视图功能接口
import { useAxios } from '@/hooks/web/useAxios'
import { useCache } from '@/hooks/web/useCache'
const request = useAxios()
const { wsCache } = useCache()
const Cache_List_Type = 'ezlcp-getListType'
const Cache_List_Def = 'ezlcp-getDataListDef-'

/**
 * 查询数据列表
 */
export const queryDataList = (data) => {
  return request.post({
    url: 'form/dataList/query',
    data
  })
}

/**
 * 获取列表类型为表格的实例分页数据
 */
export const getDataOfTable = (data) => {
  return request.post({
    url: 'form/dataList/getDataOfTable',
    data
  })
}

/**
 * @description  查询数据列表定义信息，先查缓存
 */
export const getDataList = async (id): Promise<any> => {
  let data = wsCache.get(Cache_List_Def + id)
  if (!data) {
    data = (await getDataListApi(id)).data as any
    wsCache.set(Cache_List_Def + id, data, { exp: 60 * 5 }) //5分钟
  }
  return data
}

/**
 * @description  查询数据列表定义信息
 */
const getDataListApi = (id) => {
  return request.postXww({
    url: 'form/dataList/get',
    params: { pkId: id }
  })
}
/**
 * @description  发布数据列表
 */
export const publishDataList = (id) => {
  wsCache.delete(Cache_List_Def + id)
  return request.postXww({
    url: 'form/dataList/publish',
    params: { id: id }
  })
}

/**
 * @description  删除数据列表
 */
export const delDataList = (id) => {
  wsCache.delete(Cache_List_Def + id)
  return request.postXww({
    url: 'form/dataList/delete',
    params: { pkId: id }
  })
}

/**
 * @description 保存数据列表
 */
export const saveDataList = (data) => {
  wsCache.delete(Cache_List_Def + data.dataList.id)
  return request.post({
    url: 'form/dataList/saveDataList',
    data: data
  })
}

/**
 * @description 查看数据列表SQL
 */
export const getListSQL = (data) => {
  return request.post({
    url: 'form/dataList/viewSql',
    data: data
  })
}

/**
 * @description  查询列表类型
 */
export const getListType = async () => {
  let data = wsCache.get(Cache_List_Type)
  if (!data) {
    data = (await getListTypeApi(null)).data as any
    wsCache.set(Cache_List_Type, data, { exp: 60 * 60 * 24 * 7 }) //7天
  }
  return data
}

/**
 * @description  查询实体（不包括当前实体ID）
 */
const getListTypeApi = (entId) => {
  return request.postXww({
    url: 'form/dataList/getListType',
    params: { entId: entId }
  })
}
